package com.erp.framework.util;

import java.lang.reflect.Array;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Locale;

import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import org.apache.commons.collections.FastHashMap;

import com.erp.framework.SimpleConstants;
import com.erp.framework.types.CustomBigInteger;
import com.erp.framework.util.logger.Logger;

public class ConvertUtil extends ConvertUtils implements SimpleConstants{

    public final static Converter dateConverter = new DateConverter(null);
    public final static Converter integerConverter = new CustomBigIntegerConverter(null);
    
    private static FastHashMap converters = new FastHashMap();
    
    static {
    	 converters.setFast(false);
         deregister();
         converters.setFast(true);
    }

    public static String convert(Object value) {
        if (value == null) {
            return ((String) null);
        } else if (value.getClass().isArray()) {
            value = Array.get(value, 0);
            if (value == null)
                return ((String) null);
            else
                return (valueToString(value));
        } else {
            return (valueToString(value));
        }
    }

    public static String valueToString(Object value) {
        if (value.getClass() == java.util.Date.class || value.getClass() == java.sql.Date.class) {
            SimpleDateFormat formatter = new SimpleDateFormat(CommonUtil.INPUT_DATE_FORMAT);
            return formatter.format((java.util.Date) value);
        } else
            return value.toString();
    }

//    public static void deregister() {
//        ConvertUtils.deregister();
//        register(dateConverter, java.sql.Date.class);
//        register(dateConverter, java.util.Date.class);
//    }
    
    public static java.util.Date stringToDate(String str, String formatMask, Locale locale)
	    throws ParseException {
		if (str == null || "".equals(str.trim()))
			return null;
			SimpleDateFormat formatter = new SimpleDateFormat(formatMask, locale);
			formatter.setLenient(false);
			ParsePosition pos = new ParsePosition(0);
			java.util.Date date = formatter.parse(str, pos);
			if (pos.getErrorIndex() == -1 && pos.getIndex() == str.length() )
				return date;
			else
				return null;
		//SimpleDateFormat sdf = new SimpleDateFormat(formatMask, locale);
		//java.util.Date date = null;
		//date = sdf.parse(str.trim());
		//return date;
	}

    public static void deregister() {
		ConvertUtils.deregister();
		register(dateConverter, java.sql.Date.class);
		register(dateConverter, java.util.Date.class);
		register(integerConverter, CustomBigInteger.class);
	}


	/**
	 * get the word representation given Numeric String.
	 *
	 * @param number_str
	 * @return
	 */
	public static String convertNumericStringToEnglish(String number_str) {
		if (number_str == null)
			return null;

		BigDecimal num = null;
		try {
			num = new BigDecimal(number_str);
		} catch (Exception e) {
			Logger.logExceptions(e);
			return null;
		}

		String integral_part = String.valueOf(num.intValue());
		String tmp = num.setScale(2, BigDecimal.ROUND_HALF_UP).toString();
		String fractional_part = tmp.substring(tmp.length() - 2);

		if (integral_part.length() > 9) {
			return number_str;
		}

		if (StringUtil.isZeroString(number_str)) {
			return "Zero";
		} else if (!StringUtil.isZeroString(fractional_part)) {
			return StringUtil.toWords(integral_part) + " And Cents " + StringUtil.toWords(fractional_part).trim();
		} else {
			// insert an "And"
			StringBuffer buf = new StringBuffer(StringUtil.toWords(integral_part).trim());
			String partial = null;
			boolean okayed = false;
			int pos = 0;
			for (int i = 0, j; i < integral_part.length(); i++) {
				j = integral_part.length() - i - 1;
				partial = StringUtil.toWords(integral_part.substring(j)).trim();
				if (partial.length() < buf.length() && partial.length() > 1) {
					if (partial.equals(buf.substring(buf.length() - partial.length()))) {
						if (i == 0) {
							okayed = true;
							pos = buf.length() - partial.length();
						} else {
							if (i > 1 && okayed) buf.insert(pos, "And ");
							buf.insert(buf.length() - partial.length(), "And ");
							okayed = false;
							break;
						}
					}
				}
			}
			if (okayed && integral_part.length() > 2) buf.insert(pos, "And ");
			return buf.toString();
		}
	}

	/**
	 * Convert a str to string. If the obj is null, an default string return.
	 *
	 * @param str
	 * @param dftStr
	 * @return
	 */
	public static String nullToString(String str, String dftStr) {
		return (str == null) ? dftStr : str;
	}

	/**
	 * Convert a str to string. If the obj is null, an empty string return.
	 *
	 * @param str
	 * @return
	 */
	public static String nullToString(String str) {
		return (str == null) ? "" : str;
	}

	/**
	 * Convert an object to string. If the obj is null, an empty string return.
	 *
	 * @param obj
	 * @return
	 */
	public static String nullToString(Object obj) {
		return (obj == null) ? "" : obj.toString();
	}

	/**
	 * get the Timestamp String with speicifed format mask and locale
	 *
	 * @param time
	 * @param formatMask
	 * @param locale
	 * @return
	 */
	public static String timestampToString(Timestamp time, String formatMask, Locale locale) {
		if (time == null)
			return null;

		SimpleDateFormat sdf = new SimpleDateFormat(formatMask, locale);
		String timeStr = sdf.format(time);
		sdf = null;
		return timeStr;
	}

	/**
	 * get BigDecimal String with specified format mask.
	 *
	 * @param bigDecimal
	 * @param formatMask
	 * @return
	 */
	public static String bigDecimalToString(BigDecimal bigDecimal, String formatMask) {
		
		if(bigDecimal == null){
			return null;
		}
		
		if (formatMask != null) {
			DecimalFormat formatter = new DecimalFormat(formatMask);
			return formatter.format(bigDecimal.doubleValue());
		}

		return bigDecimal.toString();
	}

	/**
	 * get BigDecimal String with specified format mask.
	 *
	 * @param bigDecimal
	 * @param formatMask
	 * @return
	 */
	public static String bigDecimalToStringNegativeWithBracket(BigDecimal bigDecimal, String formatMask, String prefix) {
		
		if(bigDecimal == null){
			return null;
		}

		String returnVal = null;
		String pre = "";
		String post = "";
		BigDecimal newBigDecimal = null;

		double val = bigDecimal.doubleValue();

		if(val < 0.000000000000000000000000000000000000){
	        pre = "(";
		    post = ")";
		}

	    if(prefix != null){
	        pre += prefix;
	    }
		
		newBigDecimal = new BigDecimal(Math.abs(val));

		if (formatMask != null) {
			DecimalFormat formatter = new DecimalFormat(formatMask);
			returnVal = formatter.format(newBigDecimal.doubleValue());
			
			return pre + returnVal + post;
		}

		returnVal = newBigDecimal.toString(); 
		return pre + returnVal + post; 
	}
	
	/**
	 * @param ts
	 * @return
	 */
	public static java.util.Date timestampToDate(java.sql.Timestamp ts) {
		if (ts == null)
			return null;
		return new java.util.Date(ts.getTime());
	}

	/**
	 * @param ts
	 * @return
	 */
	public static java.sql.Date timestampToSqlDate(java.sql.Timestamp ts) {
		if (ts == null)
			return null;
		return new java.sql.Date(ts.getTime());
	}

	/********************************
	 * Date to object functions
	 * ******************************/

	/**
	 * convert java.sql.Date to java.util.Date
	 *
	 * @param date
	 * @return
	 */
	public static java.sql.Date dateToSqlDate(java.util.Date date) {
		if (date == null)
			return null;
		return new java.sql.Date(date.getTime());
	}

	/**
	 * get Date String with specified format mask and locale
	 *
	 * @param date
	 * @param formatMask
	 * @param locale
	 * @return
	 */
	public static String dateToString(java.util.Date date, String formatMask, Locale locale) {
		if (date == null)
			return null;
		SimpleDateFormat sdf = new SimpleDateFormat(formatMask, locale);
		String dateStr = sdf.format(date);
		sdf = null;
		return dateStr;
	}

	/**
	 * convert Date to Timestamp
	 *
	 * @param date
	 * @return
	 */
	public static java.sql.Timestamp dateToTimestamp(java.util.Date date) {
		if (date == null)
			return null;
		return new java.sql.Timestamp(date.getTime());
	}

	/**
	 * convert java.sql.Date to java.util.Date
	 *
	 * @param date
	 * @return
	 */
	public static java.util.Date sqlDateToDate(java.sql.Date date) {
		if (date == null)
			return null;
		return new java.util.Date(date.getTime());
	}

	/**
	 * get SQL Date String with specified format mask and locale.
	 *
	 * @param date
	 * @param formatMask
	 * @param locale
	 * @return
	 */
	public static String sqlDateToString(java.sql.Date date, String formatMask, Locale locale) {
		if (date == null)
			return null;
		SimpleDateFormat sdf = new SimpleDateFormat(formatMask, locale);
		String dateStr = sdf.format(date);
		sdf = null;
		return dateStr;
	}

	/**
	 * convert java.sql.Date to Timestamp
	 *
	 * @param date
	 * @return
	 */
	public static java.sql.Timestamp sqlDateToTimestamp(java.sql.Date date) {
		if (date == null)
			return null;
		return new java.sql.Timestamp(date.getTime());
	}

	/********************************
	 *  String to object functions
	 * ******************************/

//	/**
//	 * get Date object given the Date String in the specified format mask and locale.
//	 *
//	 * @param str
//	 * @param formatMask
//	 * @param locale
//	 * @return
//	 * @throws ParseException
//	 */
//	public static java.util.Date stringToDate(String str, String formatMask, Locale locale)
//	        throws ParseException {
//		if (str == null || "".equals(str.trim()))
//			return null;
//			SimpleDateFormat formatter = new SimpleDateFormat(formatMask, locale);
//			formatter.setLenient(false);
//			ParsePosition pos = new ParsePosition(0);
//			java.util.Date date = formatter.parse(str, pos);
//			if (pos.getErrorIndex() == -1 && pos.getIndex() == str.length() )
//				return date;
//			else
//				return null;
////		SimpleDateFormat sdf = new SimpleDateFormat(formatMask, locale);
////		java.util.Date date = null;
////		date = sdf.parse(str.trim());
////		return date;
//	}

	/**
	 * get Date object given the Date String in specified date format mask and locale.
	 *
	 * @param str
	 * @param formatMask
	 * @return
	 * @throws ParseException
	 */
	public static java.sql.Date stringToSqlDate(String str, String formatMask, Locale locale)
	        throws ParseException {
		if (str == null)
			return null;
		SimpleDateFormat sdf = new SimpleDateFormat(formatMask, locale);
		java.sql.Date date = null;
		date = new java.sql.Date(sdf.parse(str.trim()).getTime());
		return date;
	}

	/**
	 * get Timestamp given the Timestamp String in specified format mask and locale.
	 *
	 * @param str
	 * @param formatMask
	 * @param locale
	 * @return
	 * @throws ParseException
	 */
	public static java.sql.Timestamp stringToTimestamp(String str, String formatMask, Locale locale)
	        throws ParseException {
		if (str == null)
			return null;
		SimpleDateFormat sdf = new SimpleDateFormat(formatMask, locale);
		java.sql.Timestamp time = null;
		time = new java.sql.Timestamp(sdf.parse(str.trim()).getTime());
		return time;
	}


	//	/**
//	 * Convert an object to double
//	 *
//	 * @param obj
//	 * @return
//	 */
//	public static double objToDouble(Object obj) {
//
//		if (obj == null) {
//			Logger.warn("objToDouble(), input obj is null");
//			return 0;
//		}
//
//		try {
//			String inStr = objToString(obj, true);
//			if (!CommonUtil.isEmpty(inStr))
//				return Double.parseDouble(inStr);
//			return 0;
//		} catch (Exception e) {
//			Logger.logExceptions(e);
//			return 0;
//		}
//	}

//	/**
//	 * Convert an object to string
//	 *
//	 * @param obj
//	 * @param returnNull
//	 * @return null if returnNull is set to true; Empty String when returnNull is false.
//	 */
//	public static String objToString(Object obj, boolean returnNull) {
//		if (obj == null) {
//			if (returnNull)
//				return null;
//			else
//				return "";
//		}
////    	else if (obj.getClass() == java.util.Date.class || obj.getClass() == java.sql.Date.class) {
////            SimpleDateFormat formatter = new SimpleDateFormat(Constants.INPUT_DATE_FORMAT);
////            return formatter.format((java.util.Date)obj);
////    	}
//		else
//			return obj.toString();
//	}

//	/**
//	 * @param num
//	 * @return
//	 */
//	public static String convert(Number num) {
//		return (convert(num + ""));
//	}

//	/**
//	 * Convert the specified value into a String.  If the specified value
//	 * is an array, the first element (converted to a String) will be
//	 * returned.
//	 *
//	 * @param obj Value to be converted (may be null)
//	 */
//	public static String convert(Object obj) {
//		if (obj == null) {
//			return ((String) null);
//		} else if (obj.getClass().isArray()) {
//			obj = Array.get(obj, 0);
//			if (obj == null)
//				return ((String) null);
//			else
//				return (objToString(obj, true));
//		} else {
//			return (objToString(obj, true));
//		}
//	}

//	public static String nilToString(String str) {
//		if (str == null) {
//			return "";
//		} else if (str.equalsIgnoreCase(Constants.DB_NIL)) {
//			return "";
//		} else {
//			return str;
//		}
//	}
//	public static String objToString(Object obj) {
//		if(obj == null)
//			return "";
//		else
//			return (String)obj;
//	}

//	/**
//	 * Convert arrayList to string
//	 * @param list
//	 * @return
//	 */
//	public static String arrayListToString(Collection list){
//
//		if(list == null){
//			Logger.warn("arrayListToString(), Input list is null.");
//			return null;
//		}
//		if(list.size() == 0){
//			Logger.warn("arrayListToString(), Input list is empty.");
//			return "";
//		}
//
//		String content = "";
//		Iterator itr = list.iterator();
//		while (itr.hasNext()) {
//			Object obj = itr.next();
//
//			if(obj instanceof String){
//				content = "str=" + obj + ", " + content;
//			} else if(obj instanceof Number){
//				content = "num=" + ((Number)obj).doubleValue() + ", " + content;
//			} else if(obj instanceof Hashtable){
//				content = hashtableToString((Hashtable)obj) + ", " + content;
//			} else {
//				content = "obj=" + obj.toString() + ", " + content;
//			}
//		}
//
//		return "list={" + content.substring(0, content.length()-2) + "}";
//	}
//
//	/**
//	 * Convert a hashtable to string
//	 * @param hash
//	 * @return
//	 */
//	public static String hashtableToString(Hashtable hash){
//
//		if(hash == null){
//			Logger.warn("hashtableToString(), Input Hashtable is null.");
//			return null;
//		}
//		if(hash.size() == 0){
//			Logger.warn("hashtableToString(), Input Hashtable is empty.");
//			return "";
//		}
//
//		Enumeration enum = hash.keys();
//		String content = "";
//
//		while(enum.hasMoreElements()){
//			Object key = enum.nextElement();
//			if( (Logger.getLogLevel() >= Logger.LOG_LEVEL_DEBUG) && (Logger.getLogLevel() <= Logger.LOG_LEVEL_TRACE) ){
//				content = "(" + key + "=" + hash.get(key) + ") " + content;
//			} else if(Logger.getLogLevel() > Logger.LOG_LEVEL_TRACE){
//				content = "(key=" + key + ", value=" + hash.get(key) + ") " + content;
//			} else {
//				content = hash.get(key) + ", " + content;
//			}
//		}
//
//		return ("hash=[" + content.substring(0, content.length()-2) + "]");
//	}

	/**
	 * @param ts
	 * @return
	 */
//	public static String timestampToString(Timestamp time) {
//		if(time == null) return null;
//		SimpleDateFormat sdf = new SimpleDateFormat(Constants.DEFAULT_DATE_FORMAT, Constants.DEFAULT_LOCALE);
//		String timeStr = sdf.format(time);
//		sdf = null;
//		return timeStr;
//	}






//	/**
//	 * @param bd
//	 * @return
//	 */
//	public static String bigDecimalToStr(BigDecimal bd) {
//		if (bd != null) {
//			return bd.toString();
//		} else {
//			return null;
//		}
//	}// end bigDecimalToStr

//	/**
//	 * @param obj
//	 * @return
//	 */
//	public static BigDecimal objToBigDecimal(Object obj) {
//		if (obj == null)
//			return new BigDecimal("0");
//		else
//			return (BigDecimal) obj;
//	}

//	/**
//	 * Get the corresponding BigDecimal instance for an object if this object is
//	 * an instance of Number or String. Otherwise, a BigDecimal instance with 0
//	 * value is returned.
//	 *
//	 * @param obj -  An object to process.
//	 * @return A BigDecimal instance.
//	 */
//	static public BigDecimal objToBigDecimal(Object obj, int iScale) {
//
//		return objToBigDecimal(obj).setScale(iScale, BigDecimal.ROUND_UP);
//	}


//	/**
//	 * @param inInt
//	 * @return
//	 */
//	public static String integerToString(Integer inInt) {
//		String rtn = null;
//		try {
//			if (inInt != null) {
//				rtn = inInt.toString();
//			}
//		} catch (Exception e) {
//			Logger.logExceptions(e);
//			return null;
//		}
//		return rtn;
//	}// end integerToStr


//	public static java.util.Date searchFormStringToDate(String str) {
//		if (CommonUtil.isEmpty(str))
//			return null;
//		if (str.length() == 8) {
//			return ConvertUtil.stringToDate(str, Constants.DATE_FORMAT_MASK);
//		} else if (str.length() == 10) {
//			return stringToDate(str, Constants.DATE_WITH_SLASH_FORMAT_MASK);
//		} else {
//			return null;
//		}
//
//	}


//	/**
//	 * @param str
//	 * @param returnNull
//	 * @return
//	 */
	public static BigDecimal stringToBigDecimal(String str, boolean returnNull) {
		if (str == null || str.trim().length() < 1) {
			if (returnNull) {
				return null;
			} else {
				return new BigDecimal("0");
			}
		} else {
			return new BigDecimal(str);
		}
	}
	
	public static BigDecimal stringToBigDecimal(String str) {
	    return stringToBigDecimal(str, false);
	}

//	/**
//	 * @param str
//	 * @return
//	 */
//	public static BigInteger stringToBigInteger(String str) {
//		BigInteger rtnInt = null;
//		try {
//			if (str != null && str.trim().length() > 0) {
//				rtnInt = new BigInteger(str);
//			}
//		} catch (Exception e) {
//			Logger.logExceptions(e);
//			return null;
//		}
//		return rtnInt;
//	}

//	/**
//	 * @param str
//	 * @return
//	 */
//	public static Integer stringToInteger(String str) {
//		Integer rtnInt = null;
//		try {
//			if (str != null && str.trim().length() > 0) {
//				rtnInt = Integer.valueOf(str);
//			}
//		} catch (Exception e) {
//			Logger.logExceptions(e);
//		}
//		return rtnInt;
//	}

//	/**
//	 * @param str
//	 * @return
//	 */
//	public static Timestamp stringToTimestamp(String str) {
//		Timestamp retTs = null;
//
//		try {
//			retTs = (CommonUtil.isEmpty(str) ? null : Timestamp.valueOf(str));
//		} catch (Exception e) {
//			Logger.logExceptions(e);
//			e.printStackTrace();
//		}
//
//		return retTs;
//	}

//	/**
//	 * @param str
//	 * @return
//	 */
//	public static java.util.Date stringWithSlashToDate(String str) {
//		return stringToDate(str, Constants.DATE_WITH_SLASH_FORMAT_MASK);
//	}

	//	/**
//	 * @param str
//	 * @return
//	 */
//	public static String zeroToString(String str) {
//		return (str == null) ? "0" : str;
//	}

	//	/**
//	 * get BigDecimal String with default format mask - Constants.BIG_DECIMAL_FORMAT_MASK "###,###,###,###,###,##0.000".
//	 *
//	 * @param bigDecimal
//	 * @return
//	 */
//	public static String bigDecimalToString(BigDecimal bigDecimal) {
//		DecimalFormat formatter = new DecimalFormat(Constants.BIG_DECIMAL_FORMAT_MASK);
//		return formatter.format(bigDecimal);
//	}

	//	/**
//	 * @param ts
//	 * @param formatMask
//	 * @return
//	 */
//	public static String timestampToString(Timestamp ts, String formatMask) {
//		if (ts == null) {
//			return "";
//		}
//
//		if (CommonUtil.isEmpty(formatMask)) {
//			formatMask = Constants.DATE_TIME_FORMAT_MASK;
//		}
//
//		java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(formatMask, Constants.DEFAULT_LOCALE);
//		String timeStr = sdf.format(ts);
//		sdf = null;
//		return timeStr;
//	}

//	/**
//	 * get Date String with default format mask - Constants.DATE_FORMAT_MASK "dd/MM/yyyy".
//	 *
//	 * @param date
//	 * @return
//	 */
//	public static String dateToString(java.util.Date date) {
//		SimpleDateFormat formatter = new SimpleDateFormat(Constants.DATE_FORMAT_MASK);
//		return formatter.format(date);
//	}

	//	/**
//	 * get SQL Date String with default format mask and locale - Constants.OUTPUT_DATE_FORMAT "dd/MMM/yyyy", Constants.DEFAULT_LOCALE Locale.US.
//	 *
//	 * @param date
//	 * @return
//	 */
//	public static String sqlDateToString(java.sql.Date date) {
//		SimpleDateFormat formatter = new SimpleDateFormat(Constants.OUTPUT_DATE_FORMAT, Constants.DEFAULT_LOCALE);
//		return formatter.format(date);
//	}

//	/**
//	 * get SQL Date String with specified format mask.
//	 *
//	 * @param date
//	 * @param formatMask
//	 * @return
//	 */
//	public static String sqlDateToString(java.sql.Date date, String formatMask) {
//		SimpleDateFormat formatter = new SimpleDateFormat(formatMask, Constants.DEFAULT_LOCALE);
//		return formatter.format(date);
//	}

	//	/**
//	 * get Date object with given date String in default format mask - Constants.DATE_FORMAT_MASK "dd/MM/yyyy".
//	 *
//	 * @param str
//	 * @return
//	 */
//	public static java.util.Date stringToDate(String str) {
//		return stringToDate(str, Constants.DATE_FORMAT_MASK);
//	}

	//	/**
//	 * get Date object given the Date String in default date format mask and locale - Constants.DATE_FORMAT_MASK "dd/MM/yyyy", Constants.DEFAULT_LOCALE Locale.US.
//	 *
//	 * @param str
//	 * @return
//	 * @throws ParseException
//	 */
//	public static java.sql.Date stringToSqlDate(String str) throws ParseException {
//		java.sql.Date date = null;
//		date = stringToSqlDate(str, Constants.DATE_FORMAT_MASK, Constants.DEFAULT_LOCALE);
//		return date;
//	}

//	/**
//	 * get Date object given the Date String in specified date format mask and default locale - Constants.DEFAULT_LOCALE Locale.US.
//	 *
//	 * @param str
//	 * @param formatMask
//	 * @return
//	 * @throws ParseException
//	 */
//	public static java.sql.Date stringToSqlDate(String str, String formatMask) throws ParseException {
//		java.sql.Date date = null;
//		date = stringToSqlDate(str, formatMask, Constants.DEFAULT_LOCALE);
//		return date;
//	}

	//	/**
//	 * get Timestamp given the Timestamp String in default format mask - FULL_DATETIME_FORMAT = "dd/MM/yyyy hh:mm:ss".
//	 *
//	 * @param str
//	 * @return
//	 */
//	public static Timestamp stringToTimestamp(String str) {
//		Timestamp retVal = null;
//		java.util.Date inValue = stringToDate(str, Constants.FULL_DATETIME_FORMAT);
//		retVal = (inValue == null) ? null : new Timestamp(inValue.getTime());
//		return retVal;
//	}

	//	/**
//	 * get Date object with given date String in specified format mask".
//	 *
//	 * @param str
//	 * @param formatMask
//	 * @return
//	 */
//	public static java.util.Date stringToDate(String str, String formatMask) {
//		SimpleDateFormat formatter = new SimpleDateFormat(formatMask);
//		formatter.setLenient(false);
//		ParsePosition pos = new ParsePosition(0);
//		java.util.Date date = formatter.parse(str.trim(), pos);
//		if (pos.getErrorIndex() == -1 && pos.getIndex() == str.trim().length())
//			return date;
//		else
//			return null;
//	}

	//	/**
//	 * get Date String with specified format mask.
//	 *
//	 * @param date
//	 * @param formatMask
//	 * @return
//	 */
//	public static String dateToString(java.util.Date date, String formatMask) {
//		SimpleDateFormat smf = new SimpleDateFormat(formatMask);
//		return smf.format(date);
//	}

//	/**
//	 * get Timestamp given the Timestamp String in specified format mask.
//	 *
//	 * @param str
//	 * @param formatMask
//	 * @return
//	 */
//	public static Timestamp stringToTimestamp(String str, String formatMask) {
//		Timestamp retVal = null;
//		java.util.Date inValue = stringToDate(str, formatMask);
//		retVal = (inValue == null) ? null : new Timestamp(inValue.getTime());
//		return retVal;
//	}
}